package com.xxl.job.executor.sample.frameless.test.transferThread;

public class Account {
    private int money;

    public Account(int money) {
        this.money = money;
    }

    public int getMoney() {
        return money;
    }

    public void setMoney(int money) {
        this.money = money;
    }

    public void transfer(Account target, int amount) {
        // 上面的方式，共享变量有两个，一个是A账户的余额，一个是B账户的余额，
        // 如果说单纯的加synchronized关键字是不起作用的，
        // 因为只能锁住A对象或者B对象，
        // 而我们应该需要锁住A和B账户共享的对象即可解决，
        // 即锁住账户的class文件。
        synchronized (Account.class) {
            if (this.money >= amount) {
                this.setMoney(this.getMoney() - amount);
                target.setMoney(target.getMoney() + amount);
            }
        }
    }
}
